package com.example.leddemo.widget;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class MyScroller extends ScrollView {

	private final Handler handler   = new Handler();
	private long     duration   = 50;
	private boolean    isScrolled  = false;
	private int      currentIndex = 0;
	private long     period    = 1000;
	private int      currentY   = -1;
	private double   x;
	private double   y;
	private int type = -1;

	public static final float SPEED_SLOW=1.0f;  
	public static final float SPEED_NORMAL=2.5f;  
	public static final float SPEED_FAST=5.0f;  

	private float speed=SPEED_NORMAL;  

	public MyScroller(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
//		init();
	}

	public MyScroller(Context context, AttributeSet attrs) {
		this(context, attrs,-1);
	}

	public MyScroller(Context context) {
		this(context,null,-1);
	}

//	private void init() {
//
//	}
	/**
	 * 设置当前滚动到结尾时的停顿时间，单位：毫秒
	 * @param period
	 *the period to set
	 */
	public void setPeriod(long period) {
		this.period = period;
	}
	/**
	 * 获取当前的滚动速度，单位：毫秒，值越小，速度越快。
	 * @return the speed
	 */
	public long getSpeed() {
		return duration;
	}
	/**
	 * 设置当前的滚动速度，单位：毫秒，值越小，速度越快。
	 * @param speed
	 *the duration to set
	 */
	public void setSpeed(long speed) {
		this.duration = speed;
	}
	public void setType(int type){
		this.type = type;
	}

	/**
	 * 判断当前是否为滚动状态
	 * @return the isScrolled
	 */
	public boolean isScrolled() {
		return isScrolled;
	}

	public void setSpeed(float model){
		if(model!=SPEED_FAST&&model!=SPEED_NORMAL&&model!=SPEED_SLOW)  
			model=SPEED_NORMAL;
		speed=model;
	}  

	public boolean onTouchEvent(MotionEvent event) {
		int Action = event.getAction();
		switch (Action) {
		case MotionEvent.ACTION_DOWN:
			x=event.getX();
			y=event.getY();
			if (type == 0) {
				setScrolled(false);
			}
			break;
		case MotionEvent.ACTION_MOVE:
			double moveY = event.getY() - y;
			double moveX = event.getX() - x;
			Log.d("test", "moveY = " + moveY + " moveX = " + moveX );
			if ((moveY>20||moveY<-20) && (moveX < 50 || moveX > -50) && getParent() != null) {
				getParent().requestDisallowInterceptTouchEvent(true); 
			}
			break;
		case MotionEvent.ACTION_UP:
			if (type == 0) {
				currentIndex = getScrollY();
				setScrolled(true);
			}
			break;
		default:
			break;
		}
		return super.onTouchEvent(event); 
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent p_event) 
	{ 
		Log.d("test", "onInterceptTouchEvent");
		return true; 
	} 
	/**
	 * 开启或者关闭自动滚动功能
	 * @param isScrolled
	 *      true为开启，false为关闭
	 */
	public void setScrolled(boolean isScrolled) {
		this.isScrolled = isScrolled;
		autoScroll();
	}

	/**
	 * 自动滚动
	 */
	private void autoScroll() {
		handler.postDelayed(new Runnable() {
			@Override
			public void run() {
				boolean flag = isScrolled;
				if (flag) {
					if (currentY == getScrollY()) {
						try {
							Thread.sleep(period);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						currentIndex = 0;
						scrollTo(0, 0);
						handler.postDelayed(this, period);
					} else {
						currentY = getScrollY();
						handler.postDelayed(this, duration);
						currentIndex++;
						scrollTo(0, currentIndex * 1);
					}
				} else {
					//currentIndex = 0;
					//scrollTo(0, 0);
				}
			}
		}, duration);
	}
}
